package br.com.estevam.sisfin.entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.tapestry5.beaneditor.NonVisual;
import org.apache.tapestry5.beaneditor.Validate;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Index;

@Entity
@Table(name = "TblCep")
public class Cep extends AbstractEntity {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@NonVisual
	private long id;
	
	@Column(nullable = false, unique = true)
	@Index(name = "ix_cep")
	@Validate("required,minlength=8,maxlength=8")
	private int cep;
	
	@Column(length = 100, nullable = false)
	@Validate("required,maxlength=100")
	private String endereco;
	
	@Column(length = 30, nullable = false)
	@Validate("required,maxlength=30")
	private String cidade;
	
	@Column(length = 40, nullable = false)
	@Validate("required,maxlength=40")
	private String bairro;
	
	@ManyToOne
	@JoinColumn(name="idEstado", nullable = false)
	@ForeignKey(name = "FK_cep_estado")
	private Estado estado;
	
	@Inject
	public Cep() { }
	
	public Cep(int cep, String endereco, String cidade, String bairro,
			Estado estado) {
		super();
		this.cep = cep;
		this.endereco = endereco;
		this.cidade = cidade;
		this.bairro = bairro;
		this.estado = estado;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public int getCep() {
		return cep;
	}

	public void setCep(int cep) {
		this.cep = cep;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	@Transient
	public String getDescricaoEstado(){
		return estado.getDescricao();
	}
	
	public String toString(){
		return "" + id + "---" + getUserId();
	}
}
